热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

bash脚本编程知识储备

bash脚本编程:脚本程序:解释器解释执行;首先得理清一些琐碎的知识点,我尽量把我所学的帮朋友一起梳理一下编程环境:(我会

bash脚本编程:

    脚本程序:解释器解释执行;

  1. 首先得理清一些琐碎的知识点,我尽量把我所学的帮朋友一起梳理一下
    1. 编程环境:(我会在接下来的篇章,图文例子三结合的方式带大家一起学习)

                   流程控制语句;

                       顺序执行;

                   循环执行;

                     选择执行;

    2.         bash变量是弱类型;默认字符型;

     

            变量引用:${VAR_NAME}

            引号:

                弱引用:" " //可以实现变量的替换

                强引用:' ' //不可完成变量替换

                命令引用: ` `

    3.

            声明某变量为整型变量:

                let VAR_NAME=VALUE

                declare -i VAR_NAME=VALUE

    如:在脚本想声明 变量sum为整型,并且给其赋值为0

                     declare -i sum=0

     

            声明某变量为环境变量:

                export VAR_NAME=VALUE

                declare -x VAR_NAME=VALUE

    如:

                export -i sum=0

    4. 脚本的编写格式:

        第一行:写明解释器; #!/bin/bash

        注释行:所有以#开头的行均为注释行;会被解释器忽略;

     

        执行脚本:

            赋予执行权限;指明路径执行;

            直接传递脚本给bash解释器

     

            bash的选项:

                -n: 测试脚本中是否有语法 错误;

                -x: 调试执行;

    5 . 算术运算:

            $[EXPRESSION]

            let VAR_NAME=EXPRESSION

            $((EXPRESSION))

            $(expr argu1 argu2 argu3)

        5.1 例 a=1,b=2 求 a+b?

     

        第一种方法:

            [root@localhost ~]# a=1

    [root@localhost ~]# b=2

    [root@localhost ~]# echo $[a+b]

    3

        第二种方法:let 命令的用法

                    格式:

                    let 赋值表达式

                【注】let 赋值表达式功能等同于:((赋值表达式))

            5.2    范例 1:给自变量 I 加5

                        [changsheng@localhost ~]$ i=2

[changsheng@localhost ~]$ let i=i+5

[changsheng@localhost ~]$ echo $i

7

==>去掉 let 定义

[changsheng@localhost ~]$ i=i+5

[changsheng@localhost ~]$ echo $i

i+5

提示: let i=i+5 等同于 ((i=1+5)),但后者效率更高

            5.3    范例2 :利用let计数监控web服务状态的小项目(如果看不懂,可以跳过去,这个只是提升题)

    #########################################################################

# File Name: _server_monitor.sh

# Author: changsheng

# mail: 1210982521@qq.com

# Created Time: Fri 05 Dec 2014 03:48:07 PM CST

#########################################################################

#!/bin/bash

#监控服务状态

ServerMonitor(){

    #服务状态监控

    timeout=10

    fails=0

    success=0

    while true

    do

    /usr/bin/wget --timeout=$timeout --tries-1 http://172.16.0.1/ -q -O /dev/null

        if [ $? -ne 0 ]

        then

            let fails=fails+1

            success=0

        else

            fails=0

            let success=1

        fi

        if [ $success -ge 1 ]

        then

            exit 0

        fi

        if [$fails -ge 2 ];then

            Critical=" TMS 应用服务出现故障,请紧急处理!! "

            echo $Critical | mutt -s " 服务 down " www.magedu.com

            exit

        fi

    done

 

}

 

6. 以空格为分割,打印1-10之间的数字:

        [root@localhost test-scripts]# seq -s " " 10

1 2 3 4 5 6 7 8 9 10

注解: -s 是指定分隔符

7. shell 的特殊变量

    如下图所示:

        

 

 

        7.1 $* 和$@区别例子:

                 $* 将所有的命令行的所有参数视为单个字符串,等同于"$1$2$3

             $@ 将命令行的每个参数视为单独的子串,等同于"$1" "$2" " $3".这是将参数传递给其它程序的最佳方式,因为他会保留所有内嵌在每个参数的任何空白。

实战演示:

[root@localhost test-scripts]# set -- "I am" handsome boy #===》传入三个参数

[root@localhost test-scripts]# echo $# #==è现在有三个参数

3

[root@localhost test-scripts]# for i in $*;do echo $i;done #循环打印这些参数用$*,无引号

I

am

handsome

boy

[root@localhost test-scripts]# for i in $@;do echo $i;done #没有引号的情况下和$*结果一样

I

am

handsome

boy

[root@localhost test-scripts]# for i ;do echo $i;done #--无in变量列表,相当于 in "$@"

I am

handsome

boy

[root@localhost test-scripts]# for i in "$@";do echo $i;done #------在有双引号的情况下,参数里引号内内容当做是一个参数输出了,这才是符合我们传入参数的要求set – "I am" handsome boy .

I am

handsome

boy

[root@localhost test-scripts]# for i in "$*";do echo $i;done #--加了双引号,$*表示一个字符串

I am handsome boy

[root@localhost test-scripts]# shift #---用shift 去掉第一个参数

[root@localhost test-scripts]# echo $#

2

[root@localhost test-scripts]# for i in "$@";do echo $i;done #--再次打印只剩后面的参数

handsome

boy

 

8.变量子串的常用操作

    我来为朋友们举例说明:

定义changsheng变量,内容为"I am chang sheng "

[root@localhost etc]# changsheng="I am chang sheng"

[root@localhost etc]# echo ${changsheng}

I am chang sheng    

  1. 返回字符串changsheng变量字符串的长度

[root@localhost ~]# echo ${#changsheng}

16

 

2)截取changsheng变量字符串从第二个字符之后开始取,默认取后面字符的全部,第2个字符不包括在内。        也可以理解为删除前面的多少字符

[root@localhost ~]# echo ${changsheng:2}

Am  chang sheng

 

 

3)截取changsheng变量字符从第二个字符之后,取两个字符。

[root@localhost ~]# echo ${changsheng:2:2}

am

提示:类似 cut –c 参数

[root@localhost ~]# echo ${changsheng}|cut -c 1-4

I am

[root@localhost ~]# echo ${changsheng}|cut -c 3-4

am

 

 

4)从变量$changsheng开头开始删除最短匹配"I am " 子串

[root@localhost ~]# echo ${changsheng#I am}

Chang sheng

 

 

5)从变量$changsheng开头开始删除最长匹配"I am chang子串"

[root@localhost ~]# echo ${changsheng##I am chang}

 Sheng

6)        ${var%word*}: 自右而左,删除第一次word出现处的字符开始直到尾部的所有字符;

            ${var%%word*}:自右而左,删除最后一次word出现处的字符开始直到尾部的所有字符;

 

系统脚本里的实例:

[ -z "${COLUMNS:-}" ] && COLUMNS=80

   

[ -z "${CONSOLETYPE:-}" ] && COnSOLETYPE="$(/sbin/consoletype)"

 

 

下面依次举例说明:

(1)${value:-world}

当变量未定义或者为空时,返回world内容,否则返回变量的值

[root@localhost ~]# result=${test:-UNSET}

[root@localhost ~]# echo $result

UNSET

[root@localhost ~]# echo $test

[root@localhost ~]#

结论:当test变量没有内容时,就返回了后面的UNSET。但是并没有给 result 赋值

(2)${value:=word}

[root@localhost ~]# unset result

[root@localhost ~]# echo $result

 

 

[root@localhost ~]# unset test

[root@localhost ~]# echo $test

 

[root@localhost ~]# result=${test:=UNSET}

[root@localhost ~]# echo $result

UNSET

[root@localhost ~]# echo $test

UNSET

 

提示:变量不存在时,会给变量赋值后面的内容

 

 

9.变量替换表

13. 常用文件测试操作

 

整数二元比较操作符

 

 

 

 

 

 

多分支结构

 

 

 

 

 

 

 

 

 

函数:

 


推荐阅读
  • 在CentOS/RHEL 7/6,Fedora 27/26/25上安装JAVA 9的步骤和方法
    本文介绍了在CentOS/RHEL 7/6,Fedora 27/26/25上安装JAVA 9的详细步骤和方法。首先需要下载最新的Java SE Development Kit 9发行版,然后按照给出的Shell命令行方式进行安装。详细的步骤和方法请参考正文内容。 ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • imx6ull开发板驱动MT7601U无线网卡的方法和步骤详解
    本文详细介绍了在imx6ull开发板上驱动MT7601U无线网卡的方法和步骤。首先介绍了开发环境和硬件平台,然后说明了MT7601U驱动已经集成在linux内核的linux-4.x.x/drivers/net/wireless/mediatek/mt7601u文件中。接着介绍了移植mt7601u驱动的过程,包括编译内核和配置设备驱动。最后,列举了关键词和相关信息供读者参考。 ... [详细]
  • 本文介绍了如何使用C#制作Java+Mysql+Tomcat环境安装程序,实现一键式安装。通过将JDK、Mysql、Tomcat三者制作成一个安装包,解决了客户在安装软件时的复杂配置和繁琐问题,便于管理软件版本和系统集成。具体步骤包括配置JDK环境变量和安装Mysql服务,其中使用了MySQL Server 5.5社区版和my.ini文件。安装方法为通过命令行将目录转到mysql的bin目录下,执行mysqld --install MySQL5命令。 ... [详细]
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
  • 本文介绍了在Linux下安装和配置Kafka的方法,包括安装JDK、下载和解压Kafka、配置Kafka的参数,以及配置Kafka的日志目录、服务器IP和日志存放路径等。同时还提供了单机配置部署的方法和zookeeper地址和端口的配置。通过实操成功的案例,帮助读者快速完成Kafka的安装和配置。 ... [详细]
  • 本文详细介绍了如何使用MySQL来显示SQL语句的执行时间,并通过MySQL Query Profiler获取CPU和内存使用量以及系统锁和表锁的时间。同时介绍了效能分析的三种方法:瓶颈分析、工作负载分析和基于比率的分析。 ... [详细]
  • springboot项目引入jquery浏览器报404错误的解决办法
    本文介绍了在springboot项目中引入jquery时,可能会出现浏览器报404错误的问题,并提供了解决办法。问题可能是由于将jquery.js文件复制粘贴到错误的目录导致的,解决办法是将文件复制粘贴到正确的目录下。如果问题仍然存在,可能是其他原因导致的。 ... [详细]
  • 本文讨论了编写可保护的代码的重要性,包括提高代码的可读性、可调试性和直观性。同时介绍了优化代码的方法,如代码格式化、解释函数和提炼函数等。还提到了一些常见的坏代码味道,如不规范的命名、重复代码、过长的函数和参数列表等。最后,介绍了如何处理数据泥团和进行函数重构,以提高代码质量和可维护性。 ... [详细]
  • 本文介绍了使用哈夫曼树实现文件压缩和解压的方法。首先对数据结构课程设计中的代码进行了分析,包括使用时间调用、常量定义和统计文件中各个字符时相关的结构体。然后讨论了哈夫曼树的实现原理和算法。最后介绍了文件压缩和解压的具体步骤,包括字符统计、构建哈夫曼树、生成编码表、编码和解码过程。通过实例演示了文件压缩和解压的效果。本文的内容对于理解哈夫曼树的实现原理和应用具有一定的参考价值。 ... [详细]
  • 本文介绍了一个React Native新手在尝试将数据发布到服务器时遇到的问题,以及他的React Native代码和服务器端代码。他使用fetch方法将数据发送到服务器,但无法在服务器端读取/获取发布的数据。 ... [详细]
  • 如何在php文件中添加图片?
    本文详细解答了如何在php文件中添加图片的问题,包括插入图片的代码、使用PHPword在载入模板中插入图片的方法,以及使用gd库生成不同类型的图像文件的示例。同时还介绍了如何生成一个正方形文件的步骤。希望对大家有所帮助。 ... [详细]
author-avatar
回__复卷轴
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有